home *** CD-ROM | disk | FTP | other *** search
/ STraTOS 1997 April & May / STraTOS 1 - 1997 April & May.iso / CD01 / INTERNET / SITES / LITTLE / TOOLKIT.ZIP / TOOLS / CBCACHE / CBACK40.S next >
Encoding:
Text File  |  1996-12-08  |  6.4 KB  |  252 lines

  1. *---------------------------------------------------------------*
  2. *    Assember options                    *
  3. *---------------------------------------------------------------*
  4.  
  5.     OPT        W-
  6.     COMMENT        HEAD=1
  7.  
  8. enable_cbc        ; enable for cbc_on / disable for cbc_off
  9.  
  10.     ifd        enable_cbc
  11.     output        ecback40.tos
  12.     elseif
  13.     output        dcback40.tos
  14.     endc
  15.     
  16. *---------------------------------------------------------------*
  17. *    Equates                            *
  18. *---------------------------------------------------------------*
  19.  
  20. dc4            =    $80000000
  21. ic4            =    $00008000
  22.  
  23. cookie_jar        =    $5a0
  24.  
  25. *---------------------------------------------------------------*
  26.  
  27.             rsreset
  28. pmmu_start        rs.l    1
  29. pmmu_end        rs.l    1
  30. pmmu_read        rs.l    1
  31. pmmu_write        rs.l    1
  32. pmmu_cmw        rs.l    1
  33. pmmu_cmc        rs.l    1
  34. pmmu_cms        rs.l    1
  35. pmmu_cmn        rs.l    1
  36.  
  37. *---------------------------------------------------------------*
  38.  
  39. push    macro
  40.     move.\0        \1,-(sp)
  41.     endm
  42.     
  43. pop    macro
  44.     move.\0        (sp)+,\1
  45.     endm
  46.  
  47. pushall    macro
  48.     movem.l        d0-d7/a0-a6,-(sp)
  49.     endm
  50.     
  51. popall    macro
  52.     movem.l        (sp)+,d0-d7/a0-a6
  53.     endm
  54.  
  55. fcache    macro        * flush cache(s) [type]
  56.     nop
  57.     cpusha        \1
  58.     nop
  59.     endm
  60.  
  61. icache    macro        * invalidate cache(s) [type]
  62.     nop
  63.     cinva        \1
  64.     nop
  65.     endm
  66.  
  67. ecache    macro        * flush & edit cache(s) [type], [reg]
  68.     fcache        \1
  69.     movec        \2,cacr
  70.     endm
  71.  
  72. *---------------------------------------------------------------*
  73. *    Program start                        *
  74. *---------------------------------------------------------------*
  75. start:
  76. *---------------------------------------------------------------*
  77.     lea        usp_stack,sp
  78. *---------------------------------------------------------------*
  79. *    Enter supervisor mode                    *
  80. *---------------------------------------------------------------*
  81.     pea        ssp_stack
  82.     push.w        #32
  83.     trap        #1
  84.     move.l        d0,os_stack
  85. *---------------------------------------------------------------*
  86. *    Check driver status                    *
  87. *---------------------------------------------------------------*
  88.     clr.l        exit_code
  89.     bsr        check_driver
  90.     tst.l        exit_code
  91.     beq.s        switch_caches
  92. *---------------------------------------------------------------*
  93. driver_missing:
  94. *---------------------------------------------------------------*
  95.     lea        missing,a0
  96.     bsr        cconws
  97.     moveq        #4,d0
  98.     bsr        delay
  99.     bra        exit_program
  100. *---------------------------------------------------------------*
  101. switch_caches:
  102. *---------------------------------------------------------------*
  103. *    Sign-on message                        *
  104. *---------------------------------------------------------------*
  105.     lea        sign_on,a0
  106.     bsr        cconws
  107. *---------------------------------------------------------------*
  108. *    Install driver                        *
  109. *---------------------------------------------------------------*
  110.     bsr        install
  111. *---------------------------------------------------------------*
  112. exit_program:
  113. *---------------------------------------------------------------*
  114. *    User mode                        *
  115. *---------------------------------------------------------------*
  116.     push.l        os_stack
  117.     push.w        #32
  118.     trap        #1
  119. *---------------------------------------------------------------*
  120. *    Terminate                        *
  121. *---------------------------------------------------------------*
  122.     clr.w        -(sp)
  123.     trap        #1
  124.  
  125. *---------------------------------------------------------------*
  126. *    Check for previous 68040 driver installation        *
  127. *---------------------------------------------------------------*
  128. check_driver:
  129. *---------------------------------------------------------------*
  130.     move.l        #'XMMU',d0
  131.     bsr        cookie_search
  132.     move.l        d0,exit_code
  133.     rts
  134.  
  135. *---------------------------------------------------------------*
  136. install:
  137. *---------------------------------------------------------------*
  138.     move.l        #'AB40',d0
  139.     bsr        cookie_search
  140.     move.l        4(a0),a1
  141.     move.l        a1,softcacr_ptr    
  142. *---------------------------------------------------------------*
  143. *    Disable caches                        *
  144. *---------------------------------------------------------------*
  145.     move.l        softcacr_ptr,a1
  146.     moveq        #0,d0
  147.     push.l        (a1)
  148.     move.l        d0,(a1)
  149.     ecache        bc,d0
  150. *---------------------------------------------------------------*
  151. *    Find XMMU table                        *
  152. *---------------------------------------------------------------*
  153.     move.l        #'XMMU',d0
  154.     bsr        cookie_search
  155.     move.l        4(a0),pmmu_ptr
  156. *---------------------------------------------------------------*
  157. *    Check for alt-ram                    *
  158. *---------------------------------------------------------------*
  159.     cmp.l        #$1357bd13,$5a8.w    ; magic
  160.     bne        .err
  161. *---------------------------------------------------------------*
  162.     move.l        pmmu_ptr,a0
  163.     ifd        enable_cbc
  164.     move.l        pmmu_cmc(a0),a2
  165.     elseif
  166.     move.l        pmmu_cmw(a0),a2
  167.     endc
  168.     lea        $01000000,a0
  169.     move.l        $5a4.w,a1        ; end of alternate ram
  170.     jsr        (a2)    
  171. *---------------------------------------------------------------*
  172. *    Restore caches                        *
  173. *---------------------------------------------------------------*
  174. .err:    pop.l        d0
  175.     move.l        softcacr_ptr,a1
  176.     move.l        d0,(a1)
  177.     ecache        bc,d0
  178.     rts
  179.  
  180. *---------------------------------------------------------------*
  181. cookie_search:
  182. *---------------------------------------------------------------*
  183.     move.l        cookie_jar.w,a0
  184. .loop:    cmp.l        (a0),d0
  185.     beq.s        .find
  186.     tst.l        (a0)
  187.     beq.s        .fail
  188.     addq.l        #8,a0
  189.     bra.s        .loop
  190. .find:    moveq        #0,d0
  191.     bra.s        .end
  192. .fail:    moveq        #-1,d0
  193. .end:    rts
  194.  
  195. *---------------------------------------------------------------*
  196. delay:
  197. *---------------------------------------------------------------*
  198.     mulu.w        #50,d0
  199. .wt:    push.w        d0
  200.     push.w        #37
  201.     trap        #14
  202.     addq.l        #2,sp
  203.     pop.w        d0
  204.     dbra        d0,.wt
  205.     rts
  206.  
  207. *---------------------------------------------------------------*
  208. cconws:
  209. *---------------------------------------------------------------*
  210.     pea        (a0)
  211.     push.w        #9
  212.     trap        #1        ; cconws
  213.     addq.l        #6,sp
  214.     rts
  215.  
  216. *---------------------------------------------------------------*
  217.             data
  218. *---------------------------------------------------------------*
  219.  
  220. sign_on:        dc.b    13,10
  221.             dc.b    27,'p'
  222.             ifd    enable_cbc
  223.             dc.b    ' FastRAM has been marked as [copyback]! ',13,10
  224.             elseif
  225.             dc.b    ' FastRAM has been marked as [write-though]! ',13,10
  226.             endc
  227.             dc.b    27,'q'
  228.             dc.b    0
  229.  
  230. missing:        dc.b    27,'E'
  231.             dc.b    'XMMU cookie is not installed!',13,10
  232.             dc.b    0
  233.         
  234. *---------------------------------------------------------------*
  235.             bss
  236. *---------------------------------------------------------------*
  237.  
  238. softcacr_ptr:        ds.l    1
  239. pmmu_ptr:        ds.l    1
  240. exit_code:        ds.l    1
  241.  
  242. *---------------------------------------------------------------*
  243.  
  244. os_stack:        ds.l    1
  245.  
  246.             ds.b    2048
  247. ssp_stack:        ds.l    1
  248.             ds.b    2048
  249. usp_stack:        ds.l    1
  250.  
  251. *---------------------------------------------------------------*
  252.